package sprite.estatico;

import java.util.TreeMap;
import javax.swing.ImageIcon;

/**
 * Clase que modela un repositorio de sprites
 * 
 * Solo una instancia de icono es creada con el proposito de que entidades
 * similares que solo varian en su posicion compartan su representacion grafica
 * y se minimize la utilizacion de recursos.
 * 
 * @author Agustin Orge (LU.85538)
 * @author Victoria Martinez de la Cruz (LU.87620)
 */

public class SpritePowerUp {

	/**
	 * Atributos de instancia
	 */
	protected TreeMap<String, ImageIcon> iconos;

	/**
	 * El constructor crea el mapeo e inserta aquellas entradas que son estandar
	 * del Super Mario Bros
	 */
	public SpritePowerUp() {
		iconos = new TreeMap<String, ImageIcon>();
		InitIcono();
	}

	/**
	 * Metodo interno de la clase que crea e inicializa los diferentes iconos de
	 * los powerups que se encontraran en el nivel
	 * 
	 */
	private void InitIcono() {
		ImageIcon icon;

		icon = new ImageIcon(getClass().getClassLoader().getResource(
				"sprite/icon/powerups/estrella.gif"));

		iconos.put("estrella", icon);

		icon = new ImageIcon(getClass().getClassLoader().getResource(
				"sprite/icon/powerups/flor.gif"));

		iconos.put("flor", icon);

		icon = new ImageIcon(getClass().getClassLoader().getResource(
				"sprite/icon/powerups/hongorojo.gif"));

		iconos.put("rojo", icon);

		icon = new ImageIcon(getClass().getClassLoader().getResource(
				"sprite/icon/powerups/hongoverde.gif"));

		iconos.put("verde", icon);

		icon = new ImageIcon(getClass().getClassLoader().getResource(
				"sprite/icon/powerups/moneda.gif"));

		iconos.put("moneda", icon);

		icon = new ImageIcon(getClass().getClassLoader().getResource(
				"sprite/icon/powerups/bomba.gif"));

		iconos.put("bomba", icon);

		icon = new ImageIcon(getClass().getClassLoader().getResource(
				"sprite/icon/powerups/fireball.gif"));

		iconos.put("fireball", icon);
	}

	/**
	 * Icono de la estrella
	 * 
	 * @return estrella
	 */
	public ImageIcon getEstrella() {
		return iconos.get("estrella");
	}

	/**
	 * Icono de la flor
	 * 
	 * @return flor
	 */
	public ImageIcon getFlor() {
		return iconos.get("flor");
	}

	/**
	 * Icono del hongo rojo
	 * 
	 * @return hongo-rojo
	 */
	public ImageIcon getHongoRojo() {
		return iconos.get("rojo");
	}

	/**
	 * Icono del hongo verde
	 * 
	 * @return hongo-verde
	 */
	public ImageIcon getHongoVerde() {
		return iconos.get("verde");
	}

	/**
	 * Icono de la moneda
	 * 
	 * @return moneda
	 */
	public ImageIcon getMoneda() {
		return iconos.get("moneda");
	}

	/**
	 * Icono de la bomba
	 * 
	 * @return bomba
	 */
	public ImageIcon getBomba() {
		return iconos.get("bomba");
	}

	/**
	 * Icono de la bola de fuego
	 * 
	 * @return bola de fuego
	 */
	public ImageIcon getBolaDeFuego() {
		return iconos.get("fireball");
	}

	/**
	 * Retorna, si existe, el sprite relacionado con la clave pasada por
	 * parametro
	 * 
	 * @param key
	 *            clave del icono que se desea buscar en el mapeo
	 * @return icon
	 */
	public ImageIcon getSprite(String key) {
		key = key.toLowerCase();

		// Si la clave ingresada no concuerda con ningun icono del mapeo, se
		// retorna null

		return iconos.get(key);
	}

	// comandos

	/**
	 * Metodo para agregar nuevos pares powerup-sprite al mapeo
	 * 
	 * @param icon
	 *            icono que se desea asignar
	 * @param key
	 *            clave del icono
	 */

	public void addSprite(ImageIcon icon, String key) {
		key = key.toLowerCase();

		// Si se ingresa una clave existente, el icono es reemplazado

		iconos.put(key, icon);
	}

}
